home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / spriteTime.h < prev    next >
C/C++ Source or Header  |  1992-05-11  |  5KB  |  187 lines

  1. /*
  2.  * time.h --
  3.  *
  4.  *     External definitions for the time utility routines.
  5.  *
  6.  * Copyright 1986, 1988 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * rcsid: $Header: /sprite/src/lib/include/RCS/spriteTime.h,v 1.5 92/05/11 15:24:22 kupfer Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _SPRITETIME
  19. #define _SPRITETIME
  20.  
  21. #ifndef _SPRITE
  22. #include "sprite.h"
  23. #endif
  24.  
  25. /* DATA STRUCTURES */
  26.  
  27. /*
  28.  *  Definition of a time value.
  29.  */
  30.  
  31. typedef struct {
  32.     int    seconds;
  33.     int    microseconds;
  34. } Time;
  35.  
  36. typedef struct {
  37.     int year;
  38.     int month;
  39.     int dayOfYear;
  40.     int dayOfMonth;
  41.     int dayOfWeek;
  42.     int    hours;
  43.     int    minutes;
  44.     int    seconds;
  45.     int localOffset;
  46.     Boolean dst;
  47. } Time_Parts;
  48.  
  49. /* CONSTANTS */
  50.  
  51. /*
  52.  *  The number of microseconds in one second and one millisecond.
  53.  */
  54.  
  55. #define ONE_SECOND        1000000
  56. #define TENTH_SECOND        100000
  57. #define HUNDREDTH_SECOND    10000
  58. #define ONE_MILLISECOND        1000
  59.  
  60. /*
  61.  *  Length of buffers required by the Time conversion routines.
  62.  */
  63.  
  64. #define TIME_CVT_BUF_SIZE 30
  65.  
  66. /*
  67.  *  Frequently used time values.
  68.  */
  69.  
  70. extern Time time_ZeroSeconds;
  71. extern Time time_OneMicrosecond;
  72. extern Time time_OneMillisecond;
  73. extern Time time_TenMilliseconds;
  74. extern Time time_HundredMilliseconds;
  75. extern Time time_HalfSecond;
  76. extern Time time_OneSecond;
  77. extern Time time_TwoSeconds;
  78. extern Time time_TenSeconds;
  79. extern Time time_OneMinute;
  80. extern Time time_OneHour;
  81. extern Time time_OneDay;
  82. extern Time time_OneYear;
  83. extern Time time_OneLeapYear;
  84.  
  85.  
  86. /* PROCEDURES */
  87.  
  88. extern void    Time_Add _ARGS_((Time time1, Time time2, Time *resultPtr));
  89. extern void    Time_Subtract _ARGS_((Time time1, Time time2,
  90.                       Time *resultPtr));
  91. extern void    Time_Multiply _ARGS_((Time time, int factor, Time *resultPtr));
  92. extern void    Time_Divide _ARGS_((Time time, int factor, Time *resultPtr));
  93. extern void    Time_Normalize _ARGS_((Time *timePtr));
  94. extern void    Time_ToAscii _ARGS_((int time, Boolean relativeTime,
  95.                      char *bufferPtr));
  96. extern void    Time_ToParts _ARGS_((int time, Boolean relativeTime,
  97.                      Time_Parts *partsPtr));
  98.  
  99.  
  100. /*
  101.  *----------------------------------------------------------------------
  102.  *
  103.  * Time Comparisons --
  104.  *
  105.  *    Time_LT:    time1  <   time2
  106.  *    Time_LE:    time1  <=  time2
  107.  *    Time_EQ:    time1  ==  time2
  108.  *    Time_GE:    time1  >=  time2
  109.  *    Time_GT:    time1  >   time2
  110.  *
  111.  * Results:
  112.  *     TRUE    - the relation holds for the 2 values.
  113.  *     FALSE    - the relation does not hold.
  114.  *
  115.  * Side effects:
  116.  *     None.
  117.  *
  118.  *----------------------------------------------------------------------
  119.  */
  120.  
  121. #define Time_LT(time1, time2) \
  122.         (((time1).seconds     <  (time2).seconds) ||  \
  123.          (((time1).seconds     == (time2).seconds) &&  \
  124.           ((time1).microseconds <  (time2).microseconds)))
  125.  
  126. #define Time_LE(time1, time2) \
  127.         (((time1).seconds     <  (time2).seconds) ||  \
  128.          (((time1).seconds     == (time2).seconds) &&  \
  129.           ((time1).microseconds <= (time2).microseconds)))
  130.  
  131. #define Time_EQ(time1, time2) \
  132.         (((time1).seconds     == (time2).seconds) &&  \
  133.          ((time1).microseconds == (time2).microseconds))
  134.  
  135. #define Time_GE(time1, time2) \
  136.         (((time1).seconds     >  (time2).seconds) ||  \
  137.          (((time1).seconds     == (time2).seconds) &&  \
  138.           ((time1).microseconds >= (time2).microseconds)))
  139.  
  140. #define Time_GT(time1, time2) \
  141.         (((time1).seconds     >  (time2).seconds) ||  \
  142.          (((time1).seconds     == (time2).seconds) &&  \
  143.           ((time1).microseconds >  (time2).microseconds)))
  144.  
  145.  
  146. /*
  147.  *----------------------------------------------------------------------
  148.  *
  149.  * Time_ToMs --
  150.  *
  151.  *    Convert a time value (usually a small interval) to a floating-point 
  152.  *    number of milliseconds.
  153.  *
  154.  * Results:
  155.  *    Returns a float.
  156.  *
  157.  * Side effects:
  158.  *    None.
  159.  *
  160.  *----------------------------------------------------------------------
  161.  */
  162.  
  163. #define Time_ToMs(time)    ((float)(time).seconds * 1000 + \
  164.              (float)(time).microseconds / 1000)
  165.  
  166.  
  167. /*
  168.  *----------------------------------------------------------------------
  169.  *
  170.  * Time_Average --
  171.  *
  172.  *    Return the average time from some total.
  173.  *
  174.  * Results:
  175.  *    Returns the total time divided by the given count.  Returns 0 if 
  176.  *    the count is 0.  Be sure to cast this if total is a float.
  177.  *
  178.  * Side effects:
  179.  *    None.
  180.  *
  181.  *----------------------------------------------------------------------
  182.  */
  183.  
  184. #define Time_Average(total, count) ((count) == 0 ? 0 : (total) / (count))
  185.  
  186. #endif /* _SPRITETIME */
  187.